File indexing completed on 2025-01-16 23:23:55
0001 import FWCore.ParameterSet.Config as cms
0002 import sys
0003 import argparse
0004
0005 parser = argparse.ArgumentParser(prog=sys.argv[0], description='Test various Alpaka module types')
0006
0007 parser.add_argument("--accelerators", type=str, help="Set process.options.accelerators (comma-separated string, default is to use default)", default="")
0008 parser.add_argument("--moduleBackend", type=str, help="Set Alpaka backend via module instances", default="")
0009 parser.add_argument("--processAcceleratorBackend", type=str, help="Set Alpaka backend via ProcessAcceleratorAlpaka", default="")
0010 parser.add_argument("--expectBackend", type=str, help="Expect this backend to run")
0011 parser.add_argument("--moduleSynchronize", action="store_true", help="Set synchronize parameter via module instances", default="")
0012 parser.add_argument("--processAcceleratorSynchronize", action="store_true", help="Set synchronize parameter via ProcessAcceleratorAlpaka", default="")
0013 parser.add_argument("--run", type=int, help="Run number (default: 1)", default=1)
0014
0015 args = parser.parse_args()
0016
0017 process = cms.Process('TEST')
0018
0019 process.source = cms.Source('EmptySource',
0020 firstRun = cms.untracked.uint32(args.run)
0021 )
0022
0023 process.maxEvents.input = 10
0024
0025 if len(args.accelerators) != 0:
0026 process.options.accelerators = args.accelerators.split(",")
0027
0028 process.load('Configuration.StandardSequences.Accelerators_cff')
0029 process.load("HeterogeneousCore.AlpakaCore.ProcessAcceleratorAlpaka_cfi")
0030
0031 process.alpakaESRecordASource = cms.ESSource("EmptyESSource",
0032 recordName = cms.string('AlpakaESTestRecordA'),
0033 iovIsRunNotTime = cms.bool(True),
0034 firstValid = cms.vuint32(1)
0035 )
0036 process.alpakaESRecordBSource = cms.ESSource("EmptyESSource",
0037 recordName = cms.string('AlpakaESTestRecordB'),
0038 iovIsRunNotTime = cms.bool(True),
0039 firstValid = cms.vuint32(1)
0040 )
0041 process.alpakaESRecordCSource = cms.ESSource("EmptyESSource",
0042 recordName = cms.string('AlpakaESTestRecordC'),
0043 iovIsRunNotTime = cms.bool(True),
0044 firstValid = cms.vuint32(1)
0045 )
0046
0047 process.esProducerA = cms.ESProducer("cms::alpakatest::TestESProducerA", value = cms.int32(42))
0048 process.esProducerB = cms.ESProducer("cms::alpakatest::TestESProducerB", value = cms.int32(314159))
0049 process.esProducerC = cms.ESProducer("cms::alpakatest::TestESProducerC", value = cms.int32(27))
0050
0051 from HeterogeneousCore.AlpakaTest.testAlpakaESProducerA_cfi import testAlpakaESProducerA
0052 process.alpakaESProducerA = testAlpakaESProducerA.clone(appendToDataLabel = cms.string("appendedLabel"))
0053 process.alpakaESProducerB = cms.ESProducer("TestAlpakaESProducerB@alpaka", explicitLabel = cms.string("explicitLabel"))
0054 process.alpakaESProducerC = cms.ESProducer("TestAlpakaESProducerC@alpaka")
0055 process.alpakaESProducerD = cms.ESProducer("TestAlpakaESProducerD@alpaka",
0056 srcA = cms.ESInputTag("", "appendedLabel"),
0057 srcB = cms.ESInputTag("", "explicitLabel"),
0058 )
0059 process.alpakaESProducerE = cms.ESProducer("TestAlpakaESProducerE@alpaka")
0060 process.alpakaESProducerNull = cms.ESProducer("TestAlpakaESProducerNull@alpaka",
0061 appendToDataLabel = cms.string("null"),
0062 )
0063
0064
0065 from HeterogeneousCore.AlpakaTest.testAlpakaESProducerAMulti_cfi import testAlpakaESProducerAMulti
0066
0067 process.intProduct = cms.EDProducer("IntProducer", ivalue = cms.int32(42))
0068 process.alpakaESProducerAMulti = testAlpakaESProducerAMulti.clone(appendToDataLabel = cms.string("appendedLabel"))
0069
0070 from HeterogeneousCore.AlpakaTest.testAlpakaGlobalProducer_cfi import testAlpakaGlobalProducer
0071 process.alpakaGlobalProducer = testAlpakaGlobalProducer.clone(
0072 eventSetupSource = cms.ESInputTag("alpakaESProducerA", "appendedLabel"),
0073 eventSetupSourceMulti = cms.ESInputTag("alpakaESProducerAMulti", "appendedLabel"),
0074 size = dict(
0075 alpaka_serial_sync = 10,
0076 alpaka_cuda_async = 20,
0077 alpaka_rocm_async = 30,
0078 )
0079 )
0080 process.alpakaGlobalProducerE = cms.EDProducer("TestAlpakaGlobalProducerE@alpaka",
0081 source = cms.InputTag("alpakaGlobalProducer")
0082 )
0083 process.alpakaGlobalProducerCopyToDeviceCache = cms.EDProducer("TestAlpakaGlobalProducerCopyToDeviceCache@alpaka",
0084 source = cms.InputTag("alpakaGlobalProducer"),
0085 x = cms.int32(3),
0086 y = cms.int32(4),
0087 z = cms.int32(5),
0088 )
0089 process.alpakaGlobalProducerMoveToDeviceCache = cms.EDProducer("TestAlpakaGlobalProducerMoveToDeviceCache@alpaka",
0090 source = cms.InputTag("alpakaGlobalProducer"),
0091 x = cms.int32(32),
0092 y = cms.int32(42),
0093 z = cms.int32(52),
0094 )
0095 process.alpakaGlobalProducerImplicitCopyToDevice = cms.EDProducer("TestAlpakaGlobalProducerImplicitCopyToDevice@alpaka")
0096 process.alpakaStreamProducer = cms.EDProducer("TestAlpakaStreamProducer@alpaka",
0097 source = cms.InputTag("intProduct"),
0098 eventSetupSource = cms.ESInputTag("alpakaESProducerB", "explicitLabel"),
0099 size = cms.PSet(
0100 alpaka_serial_sync = cms.int32(5),
0101 alpaka_cuda_async = cms.int32(25),
0102 alpaka_rocm_async = cms.int32(125),
0103 )
0104 )
0105 process.alpakaStreamInstanceProducer = cms.EDProducer("TestAlpakaStreamProducer@alpaka",
0106 source = cms.InputTag("intProduct"),
0107 eventSetupSource = cms.ESInputTag("alpakaESProducerB", "explicitLabel"),
0108 productInstanceName = cms.string("testInstance"),
0109 size = cms.PSet(
0110 alpaka_serial_sync = cms.int32(6),
0111 alpaka_cuda_async = cms.int32(36),
0112 alpaka_rocm_async = cms.int32(216),
0113 )
0114 )
0115 process.alpakaStreamSynchronizingProducer = cms.EDProducer("TestAlpakaStreamSynchronizingProducer@alpaka",
0116 source = cms.InputTag("alpakaGlobalProducer"),
0117 intSource = cms.InputTag("intProduct"),
0118 expectedInt = cms.int32(84)
0119 )
0120 process.alpakaStreamSynchronizingProducerToDevice = cms.EDProducer("TestAlpakaStreamSynchronizingProducerToDevice@alpaka",
0121 size = cms.PSet(
0122 alpaka_serial_sync = cms.int32(1),
0123 alpaka_cuda_async = cms.int32(2),
0124 alpaka_rocm_async = cms.int32(3),
0125 )
0126 )
0127
0128 process.alpakaGlobalConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0129 source = cms.InputTag("alpakaGlobalProducer"),
0130 expectSize = cms.int32(10),
0131 expectBackend = cms.string("SerialSync")
0132 )
0133 process.alpakaGlobalDeviceConsumer = cms.EDProducer("TestAlpakaGlobalProducerNoOutput@alpaka",
0134 source = cms.InputTag("alpakaGlobalProducer")
0135 )
0136 process.alpakaGlobalConsumerE = process.alpakaGlobalConsumer.clone(
0137 source = "alpakaGlobalProducerE",
0138 expectXvalues = cms.vdouble([(i%2)*10+1 + abs(27)+i*2 for i in range(0,5)] + [0]*5)
0139 )
0140 process.alpakaGlobalConsumerCopyToDeviceCache = process.alpakaGlobalConsumer.clone(
0141 source = "alpakaGlobalProducerCopyToDeviceCache",
0142 expectXvalues = cms.vdouble([3]*10)
0143 )
0144 process.alpakaGlobalConsumerMoveToDeviceCache = process.alpakaGlobalConsumer.clone(
0145 source = "alpakaGlobalProducerMoveToDeviceCache",
0146 expectXvalues = cms.vdouble([32]*10)
0147 )
0148 from HeterogeneousCore.AlpakaTest.modules import TestAlpakaVerifyObjectOnDevice_alpaka
0149 process.alpakaGlobalConsumerImplicitCopyToDevice = TestAlpakaVerifyObjectOnDevice_alpaka(
0150 source = "alpakaGlobalProducerImplicitCopyToDevice"
0151 )
0152 process.alpakaGlobalConsumerImplicitCopyToDeviceInstance = TestAlpakaVerifyObjectOnDevice_alpaka(
0153 source = ("alpakaGlobalProducerImplicitCopyToDevice", "instance")
0154 )
0155 process.alpakaStreamConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0156 source = cms.InputTag("alpakaStreamProducer"),
0157 expectSize = cms.int32(5),
0158 expectBackend = cms.string("SerialSync")
0159 )
0160 process.alpakaStreamDeviceConsumer = process.alpakaGlobalDeviceConsumer.clone(
0161 source = "alpakaStreamProducer"
0162 )
0163 process.alpakaStreamInstanceConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0164 source = cms.InputTag("alpakaStreamInstanceProducer", "testInstance"),
0165 expectSize = cms.int32(6),
0166 expectBackend = cms.string("SerialSync")
0167 )
0168 process.alpakaStreamSynchronizingConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0169 source = cms.InputTag("alpakaStreamSynchronizingProducer"),
0170 expectSize = cms.int32(10),
0171 expectBackend = cms.string("SerialSync")
0172 )
0173 process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer1 = process.alpakaGlobalDeviceConsumer.clone(
0174 source = "alpakaStreamSynchronizingProducerToDevice"
0175 )
0176 process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer2 = process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer1.clone()
0177 process.alpakaNullESConsumer = cms.EDProducer("TestAlpakaGlobalProducerNullES@alpaka",
0178 eventSetupSource = cms.ESInputTag("", "null")
0179 )
0180
0181 _postfixes = ["ESProducerA", "ESProducerB", "ESProducerC", "ESProducerD", "ESProducerE", "ESProducerAMulti",
0182 "ESProducerNull",
0183 "GlobalProducer", "GlobalProducerE",
0184 "GlobalProducerCopyToDeviceCache", "GlobalProducerMoveToDeviceCache",
0185 "GlobalProducerImplicitCopyToDevice",
0186 "StreamProducer", "StreamInstanceProducer",
0187 "StreamSynchronizingProducer", "StreamSynchronizingProducerToDevice",
0188 "GlobalConsumerImplicitCopyToDevice", "GlobalConsumerImplicitCopyToDeviceInstance",
0189 "GlobalDeviceConsumer", "StreamDeviceConsumer",
0190 "StreamSynchronizingProducerToDeviceDeviceConsumer1", "StreamSynchronizingProducerToDeviceDeviceConsumer2",
0191 "NullESConsumer"]
0192 alpakaModules = ["alpaka"+x for x in _postfixes]
0193 if args.processAcceleratorBackend != "":
0194 process.ProcessAcceleratorAlpaka.setBackend(args.processAcceleratorBackend)
0195 if args.moduleBackend != "":
0196 for name in alpakaModules:
0197 getattr(process, name).alpaka = cms.untracked.PSet(backend = cms.untracked.string(args.moduleBackend))
0198 if args.expectBackend == "cuda_async":
0199 def setExpect(m, size):
0200 m.expectSize = size
0201 m.expectBackend = "CudaAsync"
0202 setExpect(process.alpakaGlobalConsumer, size=20)
0203 setExpect(process.alpakaGlobalConsumerE, size=20)
0204 process.alpakaGlobalConsumerE.expectXvalues.extend([0]*(20-10))
0205 setExpect(process.alpakaGlobalConsumerCopyToDeviceCache, size=20)
0206 process.alpakaGlobalConsumerCopyToDeviceCache.expectXvalues = [3]*20
0207 setExpect(process.alpakaGlobalConsumerMoveToDeviceCache, size=20)
0208 process.alpakaGlobalConsumerMoveToDeviceCache.expectXvalues = [32]*20
0209 setExpect(process.alpakaStreamConsumer, size=25)
0210 setExpect(process.alpakaStreamInstanceConsumer, size=36)
0211 setExpect(process.alpakaStreamSynchronizingConsumer, size=20)
0212 elif args.expectBackend == "rocm_async":
0213 def setExpect(m, size):
0214 m.expectSize = size
0215 m.expectBackend = "ROCmAsync"
0216 setExpect(process.alpakaGlobalConsumer, size = 30)
0217 setExpect(process.alpakaGlobalConsumerE, size = 30)
0218 process.alpakaGlobalConsumerE.expectXvalues.extend([0]*(30-10))
0219 setExpect(process.alpakaGlobalConsumerCopyToDeviceCache, size = 30)
0220 process.alpakaGlobalConsumerCopyToDeviceCache.expectXvalues = [3]*30
0221 setExpect(process.alpakaGlobalConsumerMoveToDeviceCache, size = 30)
0222 process.alpakaGlobalConsumerMoveToDeviceCache.expectXvalues = [32]*30
0223 setExpect(process.alpakaStreamConsumer, size = 125)
0224 setExpect(process.alpakaStreamInstanceConsumer, size = 216)
0225 setExpect(process.alpakaStreamSynchronizingConsumer, size = 30)
0226
0227 if args.processAcceleratorSynchronize:
0228 process.ProcessAcceleratorAlpaka.setSynchronize(True)
0229 if args.moduleSynchronize:
0230 for name in alpakaModules:
0231 mod = getattr(process, name)
0232 if hasattr(mod, "alpaka"):
0233 mod.alpaka = dict(synchronize = cms.untracked.bool(True))
0234 else:
0235 mod.alpaka = cms.untracked.PSet(synchronize = cms.untracked.bool(True))
0236
0237 process.output = cms.OutputModule('PoolOutputModule',
0238 fileName = cms.untracked.string('testAlpaka.root'),
0239 outputCommands = cms.untracked.vstring(
0240 'drop *',
0241 'keep *_alpakaGlobalProducer_*_*',
0242 'keep *_alpakaStreamProducer_*_*',
0243 'keep *_alpakaStreamSynchronizingProducer_*_*',
0244 )
0245 )
0246
0247 process.t = cms.Task(
0248 process.intProduct,
0249 process.alpakaGlobalProducer,
0250 process.alpakaGlobalProducerE,
0251 process.alpakaGlobalProducerCopyToDeviceCache,
0252 process.alpakaGlobalProducerMoveToDeviceCache,
0253 process.alpakaGlobalProducerImplicitCopyToDevice,
0254 process.alpakaStreamProducer,
0255 process.alpakaStreamInstanceProducer,
0256 process.alpakaStreamSynchronizingProducer,
0257 process.alpakaStreamSynchronizingProducerToDevice
0258 )
0259 process.p = cms.Path(
0260 process.alpakaGlobalConsumer+
0261 process.alpakaGlobalDeviceConsumer+
0262 process.alpakaGlobalConsumerE+
0263 process.alpakaGlobalConsumerCopyToDeviceCache+
0264 process.alpakaGlobalConsumerMoveToDeviceCache+
0265 process.alpakaGlobalConsumerImplicitCopyToDevice+
0266 process.alpakaGlobalConsumerImplicitCopyToDeviceInstance+
0267 process.alpakaStreamConsumer+
0268 process.alpakaStreamDeviceConsumer+
0269 process.alpakaStreamInstanceConsumer+
0270 process.alpakaStreamSynchronizingConsumer+
0271 process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer1+
0272 process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer2+
0273 process.alpakaNullESConsumer,
0274 process.t
0275 )
0276 process.ep = cms.EndPath(process.output)