Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2023-03-17 11:05:43

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 for module instances", default="")
0009 parser.add_argument("--expectBackend", type=str, help="Expect this backend to run")
0010 parser.add_argument("--run", type=int, help="Run number (default: 1)", default=1)
0011 
0012 argv = sys.argv[:]
0013 if '--' in argv:
0014     argv.remove("--")
0015 args, unknown = parser.parse_known_args(argv)
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.CUDACore.ProcessAcceleratorCUDA_cfi")
0030 process.load("HeterogeneousCore.AlpakaCore.ProcessAcceleratorAlpaka_cfi")
0031 
0032 process.alpakaESRecordASource = cms.ESSource("EmptyESSource",
0033     recordName = cms.string('AlpakaESTestRecordA'),
0034     iovIsRunNotTime = cms.bool(True),
0035     firstValid = cms.vuint32(1)
0036 )
0037 process.alpakaESRecordBSource = cms.ESSource("EmptyESSource",
0038     recordName = cms.string('AlpakaESTestRecordB'),
0039     iovIsRunNotTime = cms.bool(True),
0040     firstValid = cms.vuint32(1)
0041 )
0042 process.alpakaESRecordCSource = cms.ESSource("EmptyESSource",
0043     recordName = cms.string('AlpakaESTestRecordC'),
0044     iovIsRunNotTime = cms.bool(True),
0045     firstValid = cms.vuint32(1)
0046 )
0047 
0048 process.esProducerA = cms.ESProducer("cms::alpakatest::TestESProducerA", value = cms.int32(42))
0049 process.esProducerB = cms.ESProducer("cms::alpakatest::TestESProducerB", value = cms.int32(314159))
0050 process.esProducerC = cms.ESProducer("cms::alpakatest::TestESProducerC", value = cms.int32(27))
0051 
0052 from HeterogeneousCore.AlpakaTest.testAlpakaESProducerA_cfi import testAlpakaESProducerA 
0053 process.alpakaESProducerA = testAlpakaESProducerA.clone(appendToDataLabel = cms.string("appendedLabel"))
0054 process.alpakaESProducerB = cms.ESProducer("TestAlpakaESProducerB@alpaka", explicitLabel = cms.string("explicitLabel"))
0055 process.alpakaESProducerC = cms.ESProducer("TestAlpakaESProducerC@alpaka")
0056 process.alpakaESProducerD = cms.ESProducer("TestAlpakaESProducerD@alpaka",
0057     srcA = cms.ESInputTag("", "appendedLabel"),
0058     srcB = cms.ESInputTag("", "explicitLabel"),
0059 )
0060 
0061 process.intProduct = cms.EDProducer("IntProducer", ivalue = cms.int32(42))
0062 
0063 from HeterogeneousCore.AlpakaTest.testAlpakaGlobalProducer_cfi import testAlpakaGlobalProducer
0064 process.alpakaGlobalProducer = testAlpakaGlobalProducer.clone(
0065     eventSetupSource = cms.ESInputTag("alpakaESProducerA", "appendedLabel"),
0066     size = dict(
0067         alpaka_serial_sync = 10,
0068         alpaka_cuda_async = 20
0069     )
0070 )
0071 process.alpakaStreamProducer = cms.EDProducer("TestAlpakaStreamProducer@alpaka",
0072     source = cms.InputTag("intProduct"),
0073     eventSetupSource = cms.ESInputTag("alpakaESProducerB", "explicitLabel"),
0074     size = cms.PSet(
0075         alpaka_serial_sync = cms.int32(5),
0076         alpaka_cuda_async = cms.int32(25)
0077     )
0078 )
0079 process.alpakaStreamInstanceProducer = cms.EDProducer("TestAlpakaStreamProducer@alpaka",
0080     source = cms.InputTag("intProduct"),
0081     eventSetupSource = cms.ESInputTag("alpakaESProducerB", "explicitLabel"),
0082     productInstanceName = cms.string("testInstance"),
0083     size = cms.PSet(
0084         alpaka_serial_sync = cms.int32(6),
0085         alpaka_cuda_async = cms.int32(36)
0086     )
0087 )
0088 process.alpakaStreamSynchronizingProducer = cms.EDProducer("TestAlpakaStreamSynchronizingProducer@alpaka",
0089     source = cms.InputTag("alpakaGlobalProducer"),
0090     intSource = cms.InputTag("intProduct"),
0091     expectedInt = cms.int32(84) # sum of intProduct and esProducerA
0092 )
0093 
0094 process.alpakaGlobalConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0095     source = cms.InputTag("alpakaGlobalProducer"),
0096     expectSize = cms.int32(10)
0097 )
0098 process.alpakaStreamConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0099     source = cms.InputTag("alpakaStreamProducer"),
0100     expectSize = cms.int32(5)
0101 )
0102 process.alpakaStreamInstanceConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0103     source = cms.InputTag("alpakaStreamInstanceProducer", "testInstance"),
0104     expectSize = cms.int32(6)
0105 )
0106 process.alpakaStreamSynchronizingConsumer = cms.EDAnalyzer("TestAlpakaAnalyzer",
0107     source = cms.InputTag("alpakaStreamSynchronizingProducer"),
0108     expectSize = cms.int32(10)
0109 )
0110 
0111 if args.moduleBackend != "":
0112     for name in ["ESProducerA", "ESProducerB", "ESProducerC", "ESProducerD",
0113                  "GlobalProducer", "StreamProducer", "StreamInstanceProducer", "StreamSynchronizingProducer"]:
0114         mod = getattr(process, "alpaka"+name)
0115         mod.alpaka = cms.untracked.PSet(backend = cms.untracked.string(args.moduleBackend))
0116 if args.expectBackend == "cuda_async":
0117     process.alpakaGlobalConsumer.expectSize = 20
0118     process.alpakaStreamConsumer.expectSize = 25
0119     process.alpakaStreamInstanceConsumer.expectSize = 36
0120     process.alpakaStreamSynchronizingConsumer.expectSize = 20
0121 
0122 process.output = cms.OutputModule('PoolOutputModule',
0123     fileName = cms.untracked.string('testAlpaka.root'),
0124     outputCommands = cms.untracked.vstring(
0125         'drop *',
0126         'keep *_alpakaGlobalProducer_*_*',
0127         'keep *_alpakaStreamProducer_*_*',
0128         'keep *_alpakaStreamSynchronizingProducer_*_*',
0129   )
0130 )
0131 
0132 process.t = cms.Task(
0133     process.intProduct,
0134     process.alpakaGlobalProducer,
0135     process.alpakaStreamProducer,
0136     process.alpakaStreamInstanceProducer,
0137     process.alpakaStreamSynchronizingProducer
0138 )
0139 process.p = cms.Path(
0140     process.alpakaGlobalConsumer+
0141     process.alpakaStreamConsumer+
0142     process.alpakaStreamInstanceConsumer+
0143     process.alpakaStreamSynchronizingConsumer,
0144     process.t
0145 )
0146 process.ep = cms.EndPath(process.output)