Back to home page

Project CMSSW displayed by LXR

 
 

    


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 # PortableMultiCollection
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) # sum of intProduct and esProducerA
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)