Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-30 04:10:33

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("--run", type=int, help="Run number (default: 1)", default=1)
0012 
0013 args = parser.parse_args()
0014 
0015 process = cms.Process('TEST')
0016 
0017 process.source = cms.Source('EmptySource',
0018     firstRun = cms.untracked.uint32(args.run)
0019 )
0020 
0021 process.maxEvents.input = 10
0022 
0023 if len(args.accelerators) != 0:
0024     process.options.accelerators = args.accelerators.split(",")
0025 
0026 process.load('Configuration.StandardSequences.Accelerators_cff')
0027 process.load("HeterogeneousCore.AlpakaCore.ProcessAcceleratorAlpaka_cfi")
0028 
0029 process.alpakaESRecordASource = cms.ESSource("EmptyESSource",
0030     recordName = cms.string('AlpakaESTestRecordA'),
0031     iovIsRunNotTime = cms.bool(True),
0032     firstValid = cms.vuint32(1)
0033 )
0034 process.alpakaESRecordBSource = cms.ESSource("EmptyESSource",
0035     recordName = cms.string('AlpakaESTestRecordB'),
0036     iovIsRunNotTime = cms.bool(True),
0037     firstValid = cms.vuint32(1)
0038 )
0039 process.alpakaESRecordCSource = cms.ESSource("EmptyESSource",
0040     recordName = cms.string('AlpakaESTestRecordC'),
0041     iovIsRunNotTime = cms.bool(True),
0042     firstValid = cms.vuint32(1)
0043 )
0044 
0045 process.esProducerA = cms.ESProducer("cms::alpakatest::TestESProducerA", value = cms.int32(42))
0046 process.esProducerB = cms.ESProducer("cms::alpakatest::TestESProducerB", value = cms.int32(314159))
0047 process.esProducerC = cms.ESProducer("cms::alpakatest::TestESProducerC", value = cms.int32(27))
0048 
0049 from HeterogeneousCore.AlpakaTest.testAlpakaESProducerA_cfi import testAlpakaESProducerA 
0050 process.alpakaESProducerA = testAlpakaESProducerA.clone(appendToDataLabel = cms.string("appendedLabel"))
0051 process.alpakaESProducerB = cms.ESProducer("TestAlpakaESProducerB@alpaka", explicitLabel = cms.string("explicitLabel"))
0052 process.alpakaESProducerC = cms.ESProducer("TestAlpakaESProducerC@alpaka")
0053 process.alpakaESProducerD = cms.ESProducer("TestAlpakaESProducerD@alpaka",
0054     srcA = cms.ESInputTag("", "appendedLabel"),
0055     srcB = cms.ESInputTag("", "explicitLabel"),
0056 )
0057 process.alpakaESProducerE = cms.ESProducer("TestAlpakaESProducerE@alpaka")
0058 process.alpakaESProducerNull = cms.ESProducer("TestAlpakaESProducerNull@alpaka",
0059     appendToDataLabel = cms.string("null"),
0060 )
0061 
0062 process.intProduct = cms.EDProducer("IntProducer", ivalue = cms.int32(42))
0063 
0064 from HeterogeneousCore.AlpakaTest.testAlpakaGlobalProducer_cfi import testAlpakaGlobalProducer
0065 process.alpakaGlobalProducer = testAlpakaGlobalProducer.clone(
0066     eventSetupSource = cms.ESInputTag("alpakaESProducerA", "appendedLabel"),
0067     size = dict(
0068         alpaka_serial_sync = 10,
0069         alpaka_cuda_async = 20,
0070         alpaka_rocm_async = 30,
0071     )
0072 )
0073 process.alpakaGlobalProducerE = cms.EDProducer("TestAlpakaGlobalProducerE@alpaka",
0074     source = cms.InputTag("alpakaGlobalProducer")
0075 )
0076 process.alpakaStreamProducer = cms.EDProducer("TestAlpakaStreamProducer@alpaka",
0077     source = cms.InputTag("intProduct"),
0078     eventSetupSource = cms.ESInputTag("alpakaESProducerB", "explicitLabel"),
0079     size = cms.PSet(
0080         alpaka_serial_sync = cms.int32(5),
0081         alpaka_cuda_async = cms.int32(25),
0082         alpaka_rocm_async = cms.int32(125),
0083     )
0084 )
0085 process.alpakaStreamInstanceProducer = cms.EDProducer("TestAlpakaStreamProducer@alpaka",
0086     source = cms.InputTag("intProduct"),
0087     eventSetupSource = cms.ESInputTag("alpakaESProducerB", "explicitLabel"),
0088     productInstanceName = cms.string("testInstance"),
0089     size = cms.PSet(
0090         alpaka_serial_sync = cms.int32(6),
0091         alpaka_cuda_async = cms.int32(36),
0092         alpaka_rocm_async = cms.int32(216),
0093     )
0094 )
0095 process.alpakaStreamSynchronizingProducer = cms.EDProducer("TestAlpakaStreamSynchronizingProducer@alpaka",
0096     source = cms.InputTag("alpakaGlobalProducer"),
0097     intSource = cms.InputTag("intProduct"),
0098     expectedInt = cms.int32(84) # sum of intProduct and esProducerA
0099 )
0100 process.alpakaStreamSynchronizingProducerToDevice = cms.EDProducer("TestAlpakaStreamSynchronizingProducerToDevice@alpaka",
0101     size = cms.PSet(
0102         alpaka_serial_sync = cms.int32(1),
0103         alpaka_cuda_async = cms.int32(2),
0104         alpaka_rocm_async = cms.int32(3),
0105     )
0106 )
0107 
0108 process.alpakaGlobalConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0109     source = cms.InputTag("alpakaGlobalProducer"),
0110     expectSize = cms.int32(10),
0111     expectBackend = cms.string("SerialSync")
0112 )
0113 process.alpakaGlobalDeviceConsumer = cms.EDProducer("TestAlpakaGlobalProducerNoOutput@alpaka",
0114     source = cms.InputTag("alpakaGlobalProducer")
0115 )
0116 process.alpakaGlobalConsumerE = process.alpakaGlobalConsumer.clone(
0117     source = "alpakaGlobalProducerE",
0118     expectXvalues = cms.vdouble([(i%2)*10+1 + abs(27)+i*2 for i in range(0,5)] + [0]*5)
0119 )
0120 process.alpakaStreamConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0121     source = cms.InputTag("alpakaStreamProducer"),
0122     expectSize = cms.int32(5),
0123     expectBackend = cms.string("SerialSync")
0124 )
0125 process.alpakaStreamDeviceConsumer = process.alpakaGlobalDeviceConsumer.clone(
0126     source = "alpakaStreamProducer"
0127 )
0128 process.alpakaStreamInstanceConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0129     source = cms.InputTag("alpakaStreamInstanceProducer", "testInstance"),
0130     expectSize = cms.int32(6),
0131     expectBackend = cms.string("SerialSync")
0132 )
0133 process.alpakaStreamSynchronizingConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0134     source = cms.InputTag("alpakaStreamSynchronizingProducer"),
0135     expectSize = cms.int32(10),
0136     expectBackend = cms.string("SerialSync")
0137 )
0138 process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer1 = process.alpakaGlobalDeviceConsumer.clone(
0139     source = "alpakaStreamSynchronizingProducerToDevice"
0140 )
0141 process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer2 = process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer1.clone()
0142 process.alpakaNullESConsumer = cms.EDProducer("TestAlpakaGlobalProducerNullES@alpaka",
0143     eventSetupSource = cms.ESInputTag("", "null")
0144 )
0145 
0146 if args.processAcceleratorBackend != "":
0147     process.ProcessAcceleratorAlpaka.setBackend(args.processAcceleratorBackend)
0148 if args.moduleBackend != "":
0149     for name in ["ESProducerA", "ESProducerB", "ESProducerC", "ESProducerD", "ESProducerE",
0150                  "ESProducerNull",
0151                  "GlobalProducer", "GlobalProducerE",
0152                  "StreamProducer", "StreamInstanceProducer",
0153                  "StreamSynchronizingProducer", "StreamSynchronizingProducerToDevice",
0154                  "GlobalDeviceConsumer", "StreamDeviceConsumer",
0155                  "StreamSynchronizingProducerToDeviceDeviceConsumer1", "StreamSynchronizingProducerToDeviceDeviceConsumer2",
0156                  "NullESConsumer"]:
0157         mod = getattr(process, "alpaka"+name)
0158         mod.alpaka = cms.untracked.PSet(backend = cms.untracked.string(args.moduleBackend))
0159 if args.expectBackend == "cuda_async":
0160     def setExpect(m, size):
0161         m.expectSize = size
0162         m.expectBackend = "CudaAsync"
0163     setExpect(process.alpakaGlobalConsumer, size=20)
0164     setExpect(process.alpakaGlobalConsumerE, size=20)
0165     process.alpakaGlobalConsumerE.expectXvalues.extend([0]*(20-10))
0166     setExpect(process.alpakaStreamConsumer, size=25)
0167     setExpect(process.alpakaStreamInstanceConsumer, size=36)
0168     setExpect(process.alpakaStreamSynchronizingConsumer, size=20)
0169 elif args.expectBackend == "rocm_async":
0170     def setExpect(m, size):
0171         m.expectSize = size
0172         m.expectBackend = "ROCmAsync"
0173     setExpect(process.alpakaGlobalConsumer, size = 30)
0174     setExpect(process.alpakaGlobalConsumerE, size = 30)
0175     process.alpakaGlobalConsumerE.expectXvalues.extend([0]*(30-10))
0176     setExpect(process.alpakaStreamConsumer, size = 125)
0177     setExpect(process.alpakaStreamInstanceConsumer, size = 216)
0178     setExpect(process.alpakaStreamSynchronizingConsumer, size = 30)
0179 
0180 process.output = cms.OutputModule('PoolOutputModule',
0181     fileName = cms.untracked.string('testAlpaka.root'),
0182     outputCommands = cms.untracked.vstring(
0183         'drop *',
0184         'keep *_alpakaGlobalProducer_*_*',
0185         'keep *_alpakaStreamProducer_*_*',
0186         'keep *_alpakaStreamSynchronizingProducer_*_*',
0187   )
0188 )
0189 
0190 process.t = cms.Task(
0191     process.intProduct,
0192     process.alpakaGlobalProducer,
0193     process.alpakaGlobalProducerE,
0194     process.alpakaStreamProducer,
0195     process.alpakaStreamInstanceProducer,
0196     process.alpakaStreamSynchronizingProducer,
0197     process.alpakaStreamSynchronizingProducerToDevice
0198 )
0199 process.p = cms.Path(
0200     process.alpakaGlobalConsumer+
0201     process.alpakaGlobalDeviceConsumer+
0202     process.alpakaGlobalConsumerE+
0203     process.alpakaStreamConsumer+
0204     process.alpakaStreamDeviceConsumer+
0205     process.alpakaStreamInstanceConsumer+
0206     process.alpakaStreamSynchronizingConsumer+
0207     process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer1+
0208     process.alpakaStreamSynchronizingProducerToDeviceDeviceConsumer2+
0209     process.alpakaNullESConsumer,
0210     process.t
0211 )
0212 process.ep = cms.EndPath(process.output)